/*
 * Cr�� le 12 mars 06
 */
package fr.cdesire.sudoku.utils;

import java.util.EmptyStackException;
import java.util.Stack;

/**
 * Cette classe �tends une pile FILO d'�l�ments en y ajoutant une m�thode qui permet de parcourir un arbre 
 * de possibilit�s.
 * @author Cedric
 */
public class ArbreEtats extends Stack {

	/**
	 * Appelle le constucteur de la classe Stack.
	 */
	public ArbreEtats() {
		super();
	}

	/**
	 * Cette m�thode ajoute un �l�ment (constitu� d'une pile 
	 * d'�tats possibles de l'objet) � l'arbre. Si il n'y a pas de 
	 * possibilit�s (�l�ment vide), il revient vers l'�l�ment 
 	 * pr�c�dent de l'arbre et ainsi de suite jusqu'� trouver un 
 	 * �l�ment ayant au moins une possibilit�. La m�thode retourne 
 	 * alors l'objet correspondant en le supprimant de l'arbre
 	 * (recherche par �limination).
	 * @param etats Pile d�tats possibles de l'objet en cours.
	 * @return Dernier objet du dernier �l�ment de l'arbre.
	 * @throws EmptyStackException Lev�e une fois que toutes les possibilit�s 
	 * ont �t� test�es avec echec.
	 */
	public Object getEtat(Stack etats) 
		throws EmptyStackException {
		
		this.push(etats);

		while(etats.isEmpty() && !this.isEmpty()) {
			this.pop();
			etats = (Stack)this.peek();
		}
		
		return (Object)etats.pop();
	}
}